//package com.bestcem.xm.wallet.service.impl;
//
//import com.bestcem.xm.common.core.domain.web.ServiceResult;
//import com.bestcem.xm.wallet.enums.LimitOrderStatusEnum;
//import com.bestcem.xm.wallet.enums.WalletRechargeOrderStatusEnum;
//import com.bestcem.xm.wallet.grpc.client.WalletWalletGrpcService;
//import com.bestcem.xm.wallet.grpc.client.dto.RechargeInfoDTO;
//import com.bestcem.xm.wallet.mq.WalletTopics;
//import com.bestcem.xm.wallet.mq.message.LimitOrderStatusPollMessage;
//import com.bestcem.xm.wallet.mq.message.LimitOrderTimeoutMessage;
//import com.bestcem.xm.wallet.service.LimitOrderService;
//import com.bestcem.xm.wallet.service.OrgWalletMqService;
//import com.bestcem.xm.wallet.service.dto.LimitOrderDTO;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//
///**
// * 企业钱包 mq消费服务接口
// *
// * @author wangyunyun <yunyun.wang@idiaoyan.com>
// * @version v1.0
// * @date 2022/5/16 18:47
// */
//@Slf4j
//@Service
//public class OrgWalletMqServiceImpl implements OrgWalletMqService {
//
//    //@Resource
//    //private WalletDelayMessageSender walletDelayMessageSender;
//
//    @Resource
//    private LimitOrderService limitOrderService;
//
//    @Resource
//    private WalletWalletGrpcService walletWalletGrpcService;
//
//    @Override
//    public void handleLimitOrderTimeout(LimitOrderTimeoutMessage message) {
//        // 查询对应的限制充值订单并校验
//        ServiceResult<LimitOrderDTO> limitOrderRt = limitOrderService.getByIdAndOrgId(message.getLimitOrderId(), message.getLimitOrderId());
//        if (!limitOrderRt.isSuccess()) {
//            log.error("处理消息失败，消息主题 = [{}]. 消息内容 = [{}]. 失败原因 = [{}]",
//                    WalletTopics.LIMIT_ORDER_TIMEOUT_HANDLE, message.toString(), limitOrderRt.getMsg());
//            return;
//        }
//        if (limitOrderRt.getData() == null) {
//            log.error("处理消息失败，消息主题 = [{}]. 消息内容 = [{}]. 失败原因 = [{}]",
//                    WalletTopics.LIMIT_ORDER_TIMEOUT_HANDLE, message.toString(), "未查询到对应的限制充值订单");
//            return;
//        }
//        // 判断限制充值订单状态是否为已创建，且到期了：是的话 更新状态为已取消
//        if (LimitOrderStatusEnum.CREATED.getStatus().equals(limitOrderRt.getData().getStatus())) {
//            LimitOrderDTO param = new LimitOrderDTO();
//            param.setLimitOrderId(limitOrderRt.getData().getLimitOrderId());
//            param.setOrgId(limitOrderRt.getData().getOrgId());
//            param.setStatus(LimitOrderStatusEnum.CANCELLED.getStatus());
//            limitOrderService.updateByIdAndOrgId(param);
//        }
//    }
//
//    @Override
//    public void pollLimitOrderStatus(LimitOrderStatusPollMessage message) {
//        // 查询对应的限制充值订单并校验
//        ServiceResult<LimitOrderDTO> limitOrderRt = limitOrderService.getByIdAndOrgId(message.getLimitOrderId(), message.getLimitOrderId());
//        if (!limitOrderRt.isSuccess()) {
//            log.error("处理消息失败，消息主题 = [{}]. 消息内容 = [{}]. 失败原因 = [{}]",
//                    WalletTopics.LIMIT_ORDER_TIMEOUT_HANDLE, message.toString(), limitOrderRt.getMsg());
//            return;
//        }
//        if (limitOrderRt.getData() == null) {
//            log.error("处理消息失败，消息主题 = [{}]. 消息内容 = [{}]. 失败原因 = [{}]",
//                    WalletTopics.LIMIT_ORDER_TIMEOUT_HANDLE, message.toString(), "未查询到对应的限制充值订单");
//            return;
//        }
//        // 判断限制充值订单状态是否为待支付：是的话 请求企业钱包查询订单状态是否更新
//        if (!LimitOrderStatusEnum.UNPAID.getStatus().equals(limitOrderRt.getData().getStatus())) {
//            return;
//        }
//        // 获取充值订单
//        RechargeInfoDTO rechargeOrder = walletWalletGrpcService.getRechargeOrder(limitOrderRt.getData().getWalletOrderId());
//        if (rechargeOrder == null) {
//            // 获取充值订单失败
//            log.error("[企业钱包]获取充值订单失败，消息主题 = [{}]. 消息内容 = [{}]. 失败原因 = [{}]",
//                    WalletTopics.LIMIT_ORDER_TIMEOUT_HANDLE, message.toString(), "获取充值订单失败");
//        } else if (WalletRechargeOrderStatusEnum.getByStatus(rechargeOrder.getStatus()) != null) {
//            // 获取充值订单成功, 状态发生变更: 更新限制订单状态
//            LimitOrderDTO param = new LimitOrderDTO();
//            param.setLimitOrderId(limitOrderRt.getData().getLimitOrderId());
//            param.setOrgId(limitOrderRt.getData().getOrgId());
//            param.setStatus(WalletRechargeOrderStatusEnum.getByStatus(rechargeOrder.getStatus()).getLimitOrderStatus());
//            limitOrderService.updateByIdAndOrgId(param);
//        }
//    }
//}
